package com.raven.craft.code.generator.common.util;

import com.raven.craft.code.generator.common.constant.BaseEnum;

/**
 * @author raven
 * @date 2019-04-02 10:34
 */
public class EnumUtil {

    public static <E extends Enum<?> & BaseEnum<C>, C> E getByCode(Class<E> enumType, C code) {
        if (null != code) {
            for (E e : enumType.getEnumConstants()) {
                if (e.getCode().equals(code)) {
                    return e;
                }
            }
        }
        throw new IllegalArgumentException("未知 code[" + code + "] in " + enumType.getSimpleName());
    }

    public static <E extends Enum<?> & BaseEnum<C>, C> boolean isContainCode(Class<E> enumType, C code) {
        if (null == code) {
            return false;
        }
        for (E e : enumType.getEnumConstants()) {
            if (e.getCode().equals(code)) {
                return true;
            }
        }
        return false;
    }

    public static <E extends Enum<?> & BaseEnum<C>, C> void assertContainCode(Class<E> enumType, C code) {
        if (!isContainCode(enumType, code)) {
            throw new IllegalArgumentException("未知 code[" + code + "] in " + enumType.getSimpleName());
        }

    }

}
